/********************************************************************* * * Copyright (C) 2003 Andrew Khan * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ***************************************************************************/ package jxl.biff.drawing; import jxl.common.Logger; /** * The base class for all escher records. This class contains * the jxl.common.header data and is basically a wrapper for the EscherRecordData * object */ abstract class EscherRecord { /** * The logger */ private static Logger logger = Logger.getLogger(EscherRecord.class); /** * The escher data */ private EscherRecordData data; //protected EscherRecordData data; /** * The length of the escher header on all records */ protected static final int HEADER_LENGTH = 8; /** * Constructor * * @param erd the data */ protected EscherRecord(EscherRecordData erd) { data = erd; } /** * Constructor * * @param type the type */ protected EscherRecord(EscherRecordType type) { data = new EscherRecordData(type); } /** * Identifies whether this item is a container * * @param cont TRUE if this is a container, FALSE otherwise */ protected void setContainer(boolean cont) { data.setContainer(cont); } /** * Gets the entire length of the record, including the header * * @return the length of the record, including the header data */ public int getLength() { return data.getLength() + HEADER_LENGTH; } /** * Accessor for the escher stream * * @return the escher stream */ protected final EscherStream getEscherStream() { return data.getEscherStream(); } /** * The position of this escher record in the stream * * @return the position */ protected final int getPos() { return data.getPos(); } /** * Accessor for the instance * * @return the instance */ protected final int getInstance() { return data.getInstance(); } /** * Sets the instance number when writing out the escher data * * @param i the instance */ protected final void setInstance(int i) { data.setInstance(i); } /** * Sets the version when writing out the escher data * * @param v the version */ protected final void setVersion (int v) { data.setVersion(v); } /** * Accessor for the escher type * * @return the type */ public EscherRecordType getType() { return data.getType(); } /** * Abstract method used to retrieve the generated escher data when writing * out image information * * @return the escher data */ abstract byte[] getData(); /** * Prepends the standard header data to the first eight bytes of the array * and returns it * * @param d the data * @return the binary data */ final byte[] setHeaderData(byte[] d) { return data.setHeaderData(d); } /** * Gets the data that was read in, excluding the header data * * @return the bytes read in, excluding the header data */ byte[] getBytes() { return data.getBytes(); } /** * Accessor for the stream length * * @return the stream length */ protected int getStreamLength() { return data.getStreamLength(); } /** * Used by the EscherDisplay class to retrieve the data * * @return the data */ protected EscherRecordData getEscherData() { return data; } }